home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
tool
/
conhlp03
/
padp_src
/
getbuff.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-18
|
941b
|
51 lines
/*
getbuff.c
94/11/27 94/11/28 95/02/18
ret : 0 : normal
1 : eof
2 : memory full
3 : buffur full
*/
#include <malloc.h>
#include <io.h>
#define byte unsigned char
#define uint unsigned int
#define BUFFSIZE ( 1024 * 2 )
#define BUFPAGE 20
static byte *mp[BUFPAGE];
static int mpg = -1;
static uint mp_buf = BUFFSIZE;
byte getbuff( int fp, uint offset, byte *c ){
int cpg,cby;
int flag = NULL;
cpg = offset / BUFFSIZE;
cby = offset % BUFFSIZE;
while( cpg > mpg && mpg < BUFPAGE && mp_buf == BUFFSIZE ){
/* バッファメモリの確保 */
if( ++mpg > BUFPAGE ){
flag = 2 ;
break;
}
if(( mp[mpg] = (byte *)malloc(BUFFSIZE) ) == NULL ){
flag = 3 ;
break;
}
/* 読み込み */
mp_buf = read(fp,mp[mpg],BUFFSIZE);
}
if( mp_buf <= cby && cpg == mpg ) flag = 1 ;
if( flag != NULL ){
*c = NULL ;
} else {
*c = *(mp[cpg]+cby);
}
return flag;
}